package dk.muldbjergskolen.gui;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.TextField;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.DefaultListSelectionModel;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JComboBox;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JList;
import javax.swing.AbstractListModel;
import javax.swing.JScrollPane;

import dk.muldbjergskolen.ctr.AnsatCtr;
import dk.muldbjergskolen.model.Ansat;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.ArrayList;

public class RetAnsat extends JDialog
{
	private JTextField textField_Fornavn;
	private JTextField textField_Efternavn;
	private JTextField textField_Adresse;
	private JTextField textField_Postnr;
	private JTextField textField_Telefon;
	private JTextField textField_Cpr;
	private JTextField textField_CprFireSidste;
	private JTextField textField_Email;
	private JComboBox<String> comboBox_Stilling;
	private JList<String> list_Fag;
	private JTextField textField_Adgangskode;
	private JTextField textField_Brugernavn;
	private AnsatCtr aCtr = new AnsatCtr();
	private JFrame frame;
	private JComboBox<String> comboBox_GlId;

	/**
	 * Create the dialog.
	 */
	public RetAnsat(RetAnsatListener listener)
	{
		retAnsatListener = listener;
		setModalityType(ModalityType.APPLICATION_MODAL);
		setTitle("Ret Ansat");
		setBounds(100, 100, 334, 522);
		getContentPane().setLayout(new BorderLayout());
		{
			JPanel panel = new JPanel();
			getContentPane().add(panel, BorderLayout.CENTER);
			panel.setLayout(null);

			JLabel lblNavn = new JLabel("Fornavn:");
			lblNavn.setBounds(10, 97, 80, 14);
			panel.add(lblNavn);

			textField_Fornavn = new JTextField();
			textField_Fornavn.setBounds(100, 94, 200, 20);
			panel.add(textField_Fornavn);
			textField_Fornavn.setColumns(10);

			JLabel label = new JLabel("Efternavn:");
			label.setBounds(10, 125, 80, 14);
			panel.add(label);

			textField_Efternavn = new JTextField();
			textField_Efternavn.setColumns(10);
			textField_Efternavn.setBounds(100, 122, 200, 20);
			panel.add(textField_Efternavn);

			JLabel label_1 = new JLabel("Adresse:");
			label_1.setBounds(10, 153, 80, 14);
			panel.add(label_1);

			textField_Adresse = new JTextField();
			textField_Adresse.setColumns(10);
			textField_Adresse.setBounds(100, 150, 200, 20);
			panel.add(textField_Adresse);

			JLabel label_2 = new JLabel("Postnr:");
			label_2.setBounds(10, 181, 80, 14);
			panel.add(label_2);

			textField_Postnr = new JTextField();
			textField_Postnr.setColumns(10);
			textField_Postnr.setBounds(100, 178, 200, 20);
			panel.add(textField_Postnr);

			JLabel label_3 = new JLabel("Stilling:");
			label_3.setBounds(10, 290, 80, 14);
			panel.add(label_3);

			JLabel label_4 = new JLabel("Telefon:");
			label_4.setBounds(10, 209, 80, 14);
			panel.add(label_4);

			textField_Telefon = new JTextField();
			textField_Telefon.setColumns(10);
			textField_Telefon.setBounds(100, 206, 200, 20);
			panel.add(textField_Telefon);

			comboBox_Stilling = new JComboBox<String>();
			comboBox_Stilling.addActionListener(new ActionListener()
			{
				public void actionPerformed(ActionEvent arg0)
				{
					if (comboBox_Stilling.getSelectedItem().toString().equals("Lærer"))
					{
						list_Fag.setEnabled(true);
					}
					else
					{
						list_Fag.setEnabled(false);
					}
				}
			});
			comboBox_Stilling.setModel(new DefaultComboBoxModel<String>(new String[] { "Sekretær", "Lærer" }));
			comboBox_Stilling.setBounds(100, 287, 80, 20);
			panel.add(comboBox_Stilling);

			JLabel lblFag = new JLabel("Fag:");
			lblFag.setBounds(10, 320, 80, 14);
			panel.add(lblFag);

			JScrollPane scrollPane_Fag = new JScrollPane();
			scrollPane_Fag.setBounds(100, 318, 200, 109);
			panel.add(scrollPane_Fag);

			list_Fag = new JList<String>();
			list_Fag.setEnabled(false);
			list_Fag.setModel(new AbstractListModel<String>()
			{
				String[] values = new String[] { "Dansk", "Engelsk", "Matematik", "Idræt", "Håndarbejde", "Sang", "Historie", "Skrivning",
						"Kristendom", "Billedkunst" };

				public int getSize()
				{
					return values.length;
				}

				public String getElementAt(int index)
				{
					return values[index];
				}
			});
			list_Fag.setSelectionModel(new DefaultListSelectionModel()
			{
				@Override
				public void setSelectionInterval(int index0, int index1)
				{
					if (list_Fag.isSelectedIndex(index0))
					{
						list_Fag.removeSelectionInterval(index0, index1);
					}
					else
					{
						list_Fag.addSelectionInterval(index0, index1);
					}
				}
			});
			scrollPane_Fag.setViewportView(list_Fag);

			JLabel label_5 = new JLabel("Email:");
			label_5.setBounds(10, 237, 80, 14);
			panel.add(label_5);

			JLabel label_6 = new JLabel("CPR:");
			label_6.setBounds(10, 265, 80, 14);
			panel.add(label_6);

			textField_Cpr = new JTextField();
			textField_Cpr.setColumns(10);
			textField_Cpr.setBounds(100, 262, 128, 20);
			panel.add(textField_Cpr);

			textField_CprFireSidste = new JTextField();
			textField_CprFireSidste.setColumns(10);
			textField_CprFireSidste.setBounds(238, 262, 62, 20);
			panel.add(textField_CprFireSidste);

			textField_Email = new JTextField();
			textField_Email.setColumns(10);
			textField_Email.setBounds(100, 234, 200, 20);
			panel.add(textField_Email);

			JLabel lblAdgangskode = new JLabel("Adgangskode:");
			lblAdgangskode.setBounds(10, 72, 80, 14);
			panel.add(lblAdgangskode);

			JLabel lblBrugernavn = new JLabel("Brugernavn:");
			lblBrugernavn.setBounds(10, 47, 80, 14);
			panel.add(lblBrugernavn);

			textField_Adgangskode = new JTextField();
			textField_Adgangskode.setColumns(10);
			textField_Adgangskode.setBounds(100, 69, 200, 20);
			panel.add(textField_Adgangskode);

			textField_Brugernavn = new JTextField();
			textField_Brugernavn.setColumns(10);
			textField_Brugernavn.setBounds(100, 41, 200, 20);
			panel.add(textField_Brugernavn);
			
			JLabel lblVlgAnsat = new JLabel("Vælg Ansats id:");
			lblVlgAnsat.setBounds(10, 13, 98, 14);
			panel.add(lblVlgAnsat);
			
			comboBox_GlId = new JComboBox<String>();
			comboBox_GlId.setModel(new DefaultComboBoxModel(new String[] {"40404040"}));
			comboBox_GlId.setBounds(100, 10, 200, 20);
			opdaterGlId();
			panel.add(comboBox_GlId);
		}
		{
			JPanel buttonPane = new JPanel();
			buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
			getContentPane().add(buttonPane, BorderLayout.SOUTH);
			{
				JButton okButton = new JButton("OK");
				okButton.addActionListener(new ActionListener()
				{
					public void actionPerformed(ActionEvent arg0)
					{
						ret();
					}
				});
				okButton.setActionCommand("OK");
				buttonPane.add(okButton);
				getRootPane().setDefaultButton(okButton);
			}
			{
				JButton cancelButton = new JButton("Cancel");
				cancelButton.addActionListener(new ActionListener()
				{
					public void actionPerformed(ActionEvent e)
					{
						setVisible(false);
					}
				});
				cancelButton.setActionCommand("Cancel");
				buttonPane.add(cancelButton);
			}
		}
	}

	//Opretter en ansat som enten kan være sekretær eller lærer.
	public void ret()
	{
		try
		{
			int glId = Integer.parseInt(comboBox_GlId.getSelectedItem().toString());
			
			String fornavn = textField_Fornavn.getText();
			String efternavn = textField_Efternavn.getText();
			String addresse = textField_Adresse.getText();
			int postNr = Integer.parseInt(textField_Postnr.getText());
			String tlf = textField_Telefon.getText();
			String email = textField_Email.getText();
			String cpr = textField_Cpr.getText() + textField_CprFireSidste.getText();
			String brugernavn = textField_Brugernavn.getText();
			String adgangskode = textField_Adgangskode.getText();
			String stilling = comboBox_Stilling.getSelectedItem().toString().toLowerCase();
			
			Ansat a = new Ansat(stilling, brugernavn, adgangskode, fornavn, efternavn, addresse, postNr, tlf, email, cpr);

			if (comboBox_Stilling.getSelectedItem().toString().equals("Sekretær"))
			{
				try
				{
					aCtr.retAnsat(a, glId);
					JOptionPane.showMessageDialog(frame, a.getFornavn() + " " + a.getEfternavn() + " er blevet rettet som Sekretær.");
				}
				catch (Exception e)
				{
					JOptionPane.showMessageDialog(frame, a.getFornavn() + " " + a.getEfternavn() + " fejlede.");
				}
			}

			else if (comboBox_Stilling.getSelectedItem().toString().equals("Lærer"))
			{
				try
				{
					aCtr.retAnsat(a, glId);
					JOptionPane.showMessageDialog(frame, a.getFornavn() + " " + a.getEfternavn() + " er blevet rettet som Lærer");
				}
				catch (Exception e)
				{
					JOptionPane.showMessageDialog(frame, a.getFornavn() + " " + a.getEfternavn() + " Fejlede. ");
				}
			}
		}
		catch (Exception e)
		{
			System.out.println(e.getMessage());
			JOptionPane.showMessageDialog(frame, "Udfyld alle felter");
		}
		OnRettetAnsat();
		setVisible(false);
	}
	
	//Opdatere ComboBoxen id, så den indeholder de ider der er i databasen.
	public void opdaterGlId()
	{
		try
		{
			comboBox_GlId.removeAllItems();
			ArrayList<dk.muldbjergskolen.model.Ansat> a = aCtr.findAnsatte();
		
			for(int i = 0; i < a.size(); i++)
			{
				comboBox_GlId.addItem(Integer.toString(a.get(i).getId()));
			}
		}
		
		catch(Exception e)
		{
			JOptionPane.showMessageDialog(this, "Ingen Id blev fundet.");
		}
	}
	//
	// Event håndtering.
	//

	// "Lyttere"
	RetAnsatListener retAnsatListener;


	public interface RetAnsatListener
	{
		void OnRettetAnsat();
	}

	/***
	 * Kaldes når en ny ansat er oprettet.
	 */
	private void OnRettetAnsat()
	{
		if (retAnsatListener != null)
			retAnsatListener.OnRettetAnsat();
	}
}
